package com.lonely.system.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lonely.common.core.domain.Select;
import com.lonely.common.core.domain.auth.UserMsgDto;
import com.lonely.system.domain.dto.user.SysUserPageQueryDto;
import com.lonely.system.domain.dto.user.SysUserSubmitDto;
import com.lonely.system.domain.dto.user.UpdateUserPasswordDTO;
import com.lonely.system.domain.entity.SysUser;
import com.lonely.system.domain.vo.system.user.SysUserDetailVo;
import com.lonely.system.domain.vo.system.user.SysUserPageQueryVo;

import java.util.List;

/**
 * 用户 业务层
 *
 * @author fzzf
 */
public interface ISysUserService extends IService<SysUser> {

    /**
     * 分页查询
     *
     * @param queryDto
     * @return
     */
    Page<SysUserPageQueryVo> page(SysUserPageQueryDto queryDto);


    /**
     * 创建用户信息
     *
     * @param submitDto
     */
    void create(SysUserSubmitDto submitDto);

    /**
     * 更新用户信息
     *
     * @param submitDto
     */
    void edit(SysUserSubmitDto submitDto);

    /**
     * 根据用户ID查询用户名称
     *
     * @param userId
     * @return
     */
    String getUserNameById(Long userId);

    /**
     * 获取用户信息
     *
     * @param userId
     * @return
     */
    SysUserDetailVo detail(Long userId);

    /**
     * 通过用户名查询用户
     *
     * @param userId 用户名
     * @return 用户对象信息
     */
    UserMsgDto selectUserByUserId(Long userId);

    /**
     * 显示指定用户的手机号码
     *
     * @param userId
     * @return
     */
    String getDeclarePhone(Long userId);

    /**
     * 离职
     *
     * @param userId
     */
    void resign(Long userId);

    /**
     * 启用
     *
     * @param userId
     */
    void enabled(Long userId);

    /**
     * 停用
     *
     * @param userId
     */
    void disabled(Long userId);

    /**
     * 获取当前登录用户对应产线的跟单员列表
     *
     * @return
     */
    List<Select> getMerchandiserSelectOptions();

    /**
     * 获取当前登录用户对应产线的设计师列表
     *
     * @return
     */
    List<Select> getDesignerSelectOptions();

    /**
     * 获取当前登录用户对应有权限的生产工种为裁剪的列表
     *
     * @return
     */
    List<Select> getCuttingBedEmployeeSelectOptions();

    /**
     * 修改密码
     *
     * @param requestDto
     */
    void updatePassword(UpdateUserPasswordDTO requestDto);
}
